home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / sys / amiga / programmer / 6626 < prev    next >
Encoding:
Internet Message Format  |  1996-08-05  |  2.3 KB

  1. Path: news.eunet.fi!newsmaster
  2. From: kp@direktor.voima.jkl.fi (Kari-Pekka Koljonen)
  3. Newsgroups: comp.sys.amiga.programmer
  4. Subject: Re: random number in assembly
  5. Date: 30 Mar 1996 19:30:09 GMT
  6. Message-ID: <1964.6654T687T310@direktor.voima.jkl.fi>
  7. References: <Pine.NEB.3.91.960327200012.12939A-100000@dirty.cute.fi>
  8. NNTP-Posting-Host: kauhajoki.fi
  9. X-Newsreader: THOR 2.22 (Amiga;TCP/IP) *UNREGISTERED*
  10.  
  11. >Hi!
  12. >Could someone tell me how to get a VERY WELL randomized number?
  13. >I've tried all kinds of methods but they are not enough random :(
  14. >To make the problem a little bit harder I need a routine that can be used 
  15. >in loops so that the numbers wouldn't be for ex. 4,8,12,16,20 or 
  16. >2,3,4,5,6,7. Hope you understood that :) 
  17.  
  18. >+++++++++++++++++++++++++++++++++++++++++++++
  19. >+ Kristian "Hwmagic" Slavov                 +
  20. >+ Email: krslavov@freenet.hut.fi   --or--   +
  21. >+         kslavov@cute.fi                   +
  22. >+++++++++++++++++++++++++++++++++++++++++++++
  23.  
  24.  
  25. Somebody sent me this a long time ago.  It creates a seed value via banging
  26. some hardware regs but you can of course replace it with your own seed and
  27. get a pseudo-random number generator.
  28.  
  29.  
  30.  
  31. srand:  move.l  $dff004,d0      ; Initialize random generator.. Call once
  32.         add.l   $dff002,d0
  33.         add.l   $dc0000,d0
  34.         add.l   $dc0004,d0
  35.         add.l   $dc0008,d0
  36.         add.l   $dc000c,d0
  37.         move.l  d0,seed
  38.         rts
  39.  
  40. rand:   move.l  seed(pc),d0     ; Returns random number (result: d0 = 0-32767)
  41.         move.l  #$41c64e6d,d1
  42.         jsr     mulu32    
  43.         add.l   #$3039,d0
  44.         move.l  d0,seed
  45.         moveq   #$10,d1
  46.         lsr.l   d1,d0
  47.         and.l   #$7fff,d0
  48.         rts
  49.  
  50. mulu32: movem.l d1-d3,-(sp)     ; Multiply d0 and d1 using 32 bit, d0=result
  51.         move.w  d1,d2
  52.         mulu    d0,d2
  53.         move.l  d1,d3
  54.         swap    d3
  55.         mulu    d0,d3
  56.         swap    d3
  57.         clr.w   d3
  58.         add.l   d3,d2
  59.         swap    d0
  60.         mulu    d1,d0
  61.         swap    d0
  62.         clr.w   d0
  63.         add.l   d2,d0
  64.         movem.l (sp)+,d1-d3
  65.         rts
  66.  
  67. seed:   dc.l    0       ; random seed storage (long)
  68.  
  69.  
  70. ---
  71. ***************************************************
  72.     K-P Koljonen / Hippopotamus Design / iNSANE
  73.  kp@direktor.voima.jkl.fi, kpkoljon@freenet.hut.fi
  74.    http://direktor.voima.jkl.fi/~kp     K-P@IRC
  75. ***************************************************
  76.  
  77.  
  78.